#ifndef PROTOCOL_H
#define PROTOCOL_H
#include<stdlib.h>
#include<unistd.h>
#include<string.h>

//定义数据格式
typedef unsigned int uint;

//定义注册状态
#define REGIST_OK "regist ok"
#define REGIST_FAILED "regist failed : name exited"

//定义登录状态
#define LOGIN_OK "login ok"
#define LOGIN_FAILED "login failed : user information is wrong"

// 设置协议数据单元 消息类型
enum ENUM_MSG_TYPE
{
    ENUM_MSG_TYPE_MIN=0,
    ENUM_MSG_TYPE_REGIST_REQUEST,   //注册请求
    ENUM_MSG_TYPE_REGIST_RESPOND,   //注册回复

    ENUM_MSG_TYPE_LOGIN_REQUEST,    //登录请求
    ENUM_MSG_TYPE_LOGIN_RESPOND,    //登录回复


    ENUM_MSG_TYPE_ALL_ONLINE_TYPE_REQUEST, //在线用户请求
    ENUM_MSG_TYPE_ALL_ONLINE_TYPE_RESPOND, //在线用户回复

    ENUM_MSG_TYPE_SEARCH_USER_TYPE_REQUEST,//搜索用户请求
    ENUM_MSG_TYPE_SEARCH_USER_TYPE_RESPOND,//搜索用户回复

    // ENUM_MSG_TYPE_REQUEST,
    // ENUM_MSG_TYPE_RESPOND,

    // ENUM_MSG_TYPE_REQUEST,
    // ENUM_MSG_TYPE_RESPOND,

    // ENUM_MSG_TYPE_REQUEST,
    // ENUM_MSG_TYPE_RESPOND,

    ENUM_MSG_TYPE_MAX=0x00ffffff
};


struct PDU
{
    uint uiPDUlen;   //总的协议数据单元大小
    uint uiMsgType;  //消息类型
    char caData[64]; //文件名字
    uint uiMsglen;   //实际消息长度
    int caMsg[];     //实际消息， int caMsg[]是通过访问地址，动态申请空间，并进行访问，类似为一个可变的数组
};

//申请 PDU 协议数据单元
PDU *mkPDU(uint uiMsglen);

#endif // PROTOCOL_H
